package com.ckzp.core;

import com.ckzp.core.util.ClientUtil;
import com.ckzp.core.util.StringUtil;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;

import java.util.Properties;

/**
 * Created by 51594 on 2022/7/27.
 */
public class ConfigUtil {

    /**
     * 默认配置对象
     */
    private static Prop pu;

    /**
     * 定义默认配置文件名，放classes下，config.properties
     * windo环境读取win_web
     * linux读取linux
     */
    private static String NODE = "node0";


    private static final String CONFIGPATH_WINDOWS = "win_web.properties";
    private static final String CONFIGPATH_LINUX = "linux_web.properties";
    private static final String CONFIGPATH_LINUX_NODE = "linux_[node].properties";


    /**
     * 读配置文件
     * //每个节点的配置文件不一样
     * TOMCAT节点配置方式
     * tomcat/bin/catalina.sh
     * 注释结束后加上以下配置，node1为节点名称，对应 linux_[node].properties
     * JAVA_OPTS="$JAVA_OPTS -DSITENODE=node1"
     */
    static {
        Properties props = System.getProperties();
        //判断 操作系统
        String osName = props.getProperty("os.name").toLowerCase();
        NODE = ClientUtil.getWebNode();
        try {
            if (osName.indexOf("windows") > -1) {
                pu = PropKit.use(CONFIGPATH_WINDOWS);
            } else {
                if (NODE != null && NODE.indexOf("node") > -1) {
                    pu = PropKit.use(StringUtil.replace(CONFIGPATH_LINUX_NODE, "[node]", NODE));
                } else {
                    pu = PropKit.use(CONFIGPATH_LINUX);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 读取 WEB_PATH
     *
     * @return
     */
    public static String getWebPath() {
        return getProperty("WEB_PATH");
    }

    /**
     * 读取 节点名
     *
     * @return
     */
    public static String getNode() {
        return NODE;
    }

    /**
     * 读取 ADMIN_PATH
     *
     * @return
     */
    public static String getWebAdminPath() {
        return getProperty("ADMIN_PATH");
    }

    /**
     * 读取 ADMIN_PATH
     *
     * @return
     */
    public static String getFullWebAdminPath() {
        return getWebHost() + getWebAdminPath();
    }


    /**
     * 读取 ADMIN_PATH
     *
     * @return
     */
    public static String getFullWebAdminLoginPath() {
        return getWebHost() + getWebAdminPath() + "/login/login";
    }

    /**
     * 读取 PAGE_PATH
     *
     * @return
     */
    public static String getWebPagePath() {
        return getProperty("PAGE_PATH");
    }


    /**
     * 读取 WEB_HOST
     *
     * @return
     */
    public static String getWebHost() {
        return getProperty("WEB_HOST");
    }


    /**
     * 取web-info路经
     *
     * @return
     */
    public static String getWebInfoPath() {
        String path = ConfigUtil.class.getResource("/").getPath();
        return path.substring(0, path.indexOf("classes") - 1);
    }

    /**
     * 判断 是否debug
     *
     * @return
     */
    public static boolean DEBUG() {
        if (isLinux()) {
            return "true".equals(getProperty("DEBUG")) ? true : false;
        } else {
            return "true".equals(getProperty("DEBUG")) ? true : false;
        }
    }

    /**
     * 判断 是否debug
     *
     * @return
     */
    public static boolean READONLY() {
        return "true".equals(getProperty("READONLY")) ? true : false;
    }

    /**
     * 是否linux
     *
     * @return
     */
    public static boolean isLinux() {
        Properties props = System.getProperties(); //
        String osName = props.getProperty("os.name").toLowerCase(); //
        if (osName.indexOf("windows") > -1) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * 是否windows
     *
     * @return
     */
    public static boolean isWindows() {
        Properties props = System.getProperties(); //
        String osName = props.getProperty("os.name").toLowerCase(); //
        if (osName.indexOf("windows") > -1) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 是否 task
     *
     * @return
     */
    public static boolean isTask() {
        return "true".equals(getProperty("TASK")) ? true : false;
    }


    /**
     * 是否 form token
     * 表单进行一次性验证
     *
     * @return
     */
    public static boolean isFormToken() {
        return "true".equals(getProperty("FORM_TOKEN")) ? true : false;
    }

    /**
     * 读取属性值
     *
     * @param propName
     * @return
     */
    public static String getProperty(String propName) {
        return pu.get(propName);
    }


    /**
     * 读取属性值
     *
     * @param propName
     * @return
     */
    public static String getProperty(String propName, String defvalue) {
        String value = pu.get(propName);
        return value == null ? defvalue : value;
    }

    /**
     * 判断 表单是否token
     *
     * @return
     */
    public static boolean isToken() {
        return "true".equals(getProperty("FORM_TOKEN")) ? true : false;
    }


}
